package cn.kgc.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

//读取数据库属性文件，获取数据库连接信息
//如何让用户只能创建一个ConfigManager？--单例模式(1)把构造方法私有 (2)程序提供给别人唯一对象
//单例模式的两种实现方式：1.饿汉方式 2.懒汉方式
/*（1）饿汉方式：
private static ConfigManager configManager = new ConfigManager();

public static ConfigManager getInstance(){
	return configManager;
}
*/


//不用单例的情况：
//ConfigManager c = new ConfigManager();
//c.getString("jdbc.driver");

//使用单例的情况
//ConfigManager.getInstance().getString("jdbc.driver");
//ConfigManager.getInstance().getString("jdbc.connection.url");

//(2)懒汉方式
public class ConfigManager {
	private static ConfigManager configManager;
	private Properties properties;
	
	private ConfigManager(){
		String configFile = "database.properties";
		InputStream in = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
		properties = new Properties();//少加了这几句就会报空指针异常，因为是一个空对象，没有创建实例
		try {
			properties.load(in); 
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//提供给别人一个唯一的ConfigManager对象
	//这里使用静态方法：可以直接通过列名调用该方法生成ConfigManager对象，而不需要创建ConfigManager对象再调用一个普通方法
	public static synchronized ConfigManager getInstance(){
		if(configManager == null){
			configManager = new ConfigManager();
		}
		return configManager;
	}
	
	//根据属性文件中的键获得对应的值ֵ
	public String getString(String key){
		return properties.getProperty(key);
	}
}
